﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
//
//#define SQUARE(x) x*x
//
//int main()
//{
//    int a = 5;
//    int ret = SQUARE(a+1);
//    //int ret = a+1*a+1;
//    printf("%d\n", ret);
//
//    return 0;
//}


//#define MAX(X,Y) ((X)>(Y)?(X):(Y))
//
//int main()
//{
//	int a = 3;
//	int b = 5;
//	int m = MAX(a, b);
//	//int m = ((a)>(b)?(a):(b));
//	//         
//	printf("m = %d\n", m);
//	printf("a = %d\n", a);
//	printf("b = %d\n", b);
//
//
//	return 0;
//}


//#define MAX(X,Y) ((X)>(Y)?(X):(Y))
//
//int main()
//{
//	int a = 3;
//	int b = 5;
//	int m = MAX(a++, b++);
//	//int m = ((a++)>(b++)?(a++):(b++));
//	//         
//	printf("m = %d\n", m);
//	printf("a = %d\n", a);
//	printf("b = %d\n", b);
//
//
//	return 0;
//}


//#define Malloc(n, type)  (type*)malloc(n*sizeof(type))
//
//int main()
//{
//	int*p = (int*)malloc(10*sizeof(int));
//	
//	int*ptr = Malloc(10, int);
//	//int *ptr = (int*)malloc(10*sizeof(int));
//	free(p);
//	p = NULL;
//
//	return 0;
//}

//
//int int_max(int x, int y)
//{
//	return x > y ? x : y;
//}
//float float_max(float x, float y)
//{
//	return x > y ? x : y;
//}


//#define GENERIC_MAX(type)    \
//		type type##_max(type x, type y) \
//		{   \
//			return x>y?x:y;\
//		}
//
////定义函数
//GENERIC_MAX(int);//替换到宏体内后int##_max ⽣成了新的符号 int_max做函数名
//GENERIC_MAX(float);//替换到宏体内后float##_max ⽣成了新的符号 float_max做函数名
//
//
//int main()
//{
//	int r1 = int_max(3, 5);
//	printf("%d\n", r1);
//
//	float r2 = float_max(3.1f, 4.5f);
//	printf("%f\n", r2);
//
//	return 0;
//}


//#include <stdio.h>
//int main()
//{
//	int array[ARRAY_SIZE];
//	int i = 0;
//	for (i = 0; i < ARRAY_SIZE; i++)
//	{
//		array[i] = i;
//	}
//	for (i = 0; i < ARRAY_SIZE; i++)
//	{
//		printf("%d ", array[i]);
//	}
//	printf("\n");
//	return 0;
//}

//
//#include <stdio.h>
//
//#define __DEBUG__
//
//int main()
//{
//	int i = 0;
//	int arr[10] = { 0 };
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//#ifdef __DEBUG__
//		printf("%d\n", arr[i]);//为了观察数组是否赋值成功。
//#endif //__DEBUG__
//	}
//
//	return 0;
//}



//1.
//	#if 常量表达式
//		//...
//	#endif
////常量表达式由预处理器求值。
//如：
//	#define __DEBUG__ 1
//	#if __DEBUG__
//		//..
//	#endif
//
//2.多个分⽀的条件编译
//	#if 常量表达式
//		//...
//	#elif 常量表达式
//		//...
//	#else
//		//...
//	#endif
//
//3.判断是否被定义
//	#if defined(symbol)
//	#ifdef symbol
//
//	#if !defined(symbol)
//	#ifndef symbol
//
//4.嵌套指令
//	#if defined(OS_UNIX)
//	       #ifdef OPTION1
//	              unix_version_option1();
//	       #endif
//
//	       #ifdef OPTION2
//	              unix_version_option2();
//	       #endif
//
//	#elif defined(OS_MSDOS) 
//	       #ifdef OPTION2
//	              msdos_version_option2();
//	       #endif
//	#endif
